package com.timing.utils;

import lombok.extern.slf4j.Slf4j;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 *
 * 获取指定时间
 *
 * @author zhangshanlai
 * @ClassName GetAnyTime
 * @description: TODO
 * @datetime 2022年 09月 27日 20:24
 */
public class TimeUtils {

    /**
     *时间转String
     *
     * @param date 时间
     * @param format 时间格式
     * @return 返回当前时间
     */
    public static String getTime(Date date,String format){
        SimpleDateFormat dateFormat  = new SimpleDateFormat(format);
        return dateFormat.format(date);
    }

    /**
     *String转时间
     *
     * @param time 时间
     * @param format 时间格式
     * @return 返回当前时间
     */
    public static Date getDate(String time,String format){
        SimpleDateFormat dateFormat  = new SimpleDateFormat(format);
        try {
            return dateFormat.parse(time);
        } catch (ParseException e) {
//            log.info("TimeUtils---String转时间出现报错");
            return null;
        }
    }

    /**
     * 以当前时间为基准 获取之前或者之后天数的时间
     * @param timeNum  指定的天数（负数为之前天数  正数为之后天数）
     * @param format 时间格式
     * @return 获取的之前或者之后的天数的时间
     */
    public static String getDayTime(Integer timeNum,String format){
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE, timeNum);
        SimpleDateFormat dateFormat  = new SimpleDateFormat(format);
        return dateFormat.format(calendar.getTime());
    }

    /**
     * 以当前时间为基准 获取之前或者之后天数的时间
     * @param timeNum  指定的天数（负数为之前天数  正数为之后天数）
     * @return 获取的之前或者之后的天数的时间
     */
    public static Date getDayTime(Integer timeNum) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DATE, timeNum);
        return calendar.getTime();
    }

    /**
     * 以当前时间为基准 获取之前或者之后月数的时间
     * @param timeNum  指定的月数（负数为之前月数  正数为之后月数）
     * @param format 时间格式
     * @return 获取的之前或者之后的天数的时间
     */
    public static String GetMonthTime(Integer timeNum,String format){
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.MONTH, timeNum);
        SimpleDateFormat dateFormat  = new SimpleDateFormat(format);
        return dateFormat.format(calendar.getTime());
    }

    /**
     * 以当前时间为基准 获取之前或者之后月数的时间
     * @param timeNum  指定的月数（负数为之前月数  正数为之后月数）
     * @return 获取的之前或者之后的天数的时间
     */
    public static Date GetMonthTime(Integer timeNum) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.MONTH, timeNum);
        return calendar.getTime();
    }

    /**
     * 以当前时间为基准 获取之前或者之后年数的时间
     * @param timeNum  指定的天数（负数为之前月数  正数为之后月数）
     * @param format 时间格式
     * @return 获取的之前或者之后的天数的时间
     */
    public static String GetYearTime(Integer timeNum,String format){
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR, timeNum);
        SimpleDateFormat dateFormat  = new SimpleDateFormat(format);
        return dateFormat.format(calendar.getTime());
    }

    /**
     * 以当前时间为基准 获取之前或者之后年数的时间
     * @param timeNum  指定的年数（负数为之前年数  正数为之后年数）
     * @return 获取的之前或者之后的天数的时间
     */
    public static Date GetYearTime(Integer timeNum){
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR, timeNum);
        return calendar.getTime();
    }

    /**
     * 以当前时间为基准 获取之前或者之后小时
     * @param timeNum  指定的小时（负数为之前小时  正数为之后小时）
     * @return 获取的之前或者之后的天数的时间
     */
    //获取30小时前的时间
    public static Date getBeforeHour(Integer timeNum) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.HOUR_OF_DAY, timeNum);
        return calendar.getTime();
    }
    /**
     * 以当前时间为基准 获取之前或者之后分钟
     * @param timeNum  指定的分钟（负数为之前分钟 正数为之后分钟）
     * @return 获取的之前或者之后分钟的时间
     */
    //获取30分钟前的时间
    public static Date getBeforeMinute(Integer timeNum) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.MINUTE, timeNum);
        return calendar.getTime();
    }
    /**
     * 以当前时间为基准 获取之前或者之后秒
     * @param timeNum  指定的秒（负数为之前秒小时  正数为之后秒）
     * @return 获取的之前或者之后秒的时间
     */
    //获取当前时间后的时间（秒）
    public static Date getBeforeSecond(Integer timeNum) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.SECOND, timeNum);
        return calendar.getTime();
    }


}
